package com.yuelan.apartment.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuelan.apartment.domain.RentBill;
import com.yuelan.apartment.domain.vo.RentBillVo;
import com.yuelan.apartment.domain.vo.RentProfitVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;

/**
 * @description:
 * @Author: ZhaoYi
 * @date: 24-6-22 6:49
 */
@Mapper
public interface RentBillMapper extends BaseMapper<RentBill> {

    /**
     * 新增租金订单
     */
    int insertRentBill(RentBill rentBill);

    /**
     * 批量插入租金账单
     */
    int insertBatchRentBill(@Param("rentBillList") List<RentBill> rentBillList);

    /**
     * 查询所有租金订单
     */
    List<RentBill> selectRentOrderList(Long id);

    /**
     * 查询租金订单
     */
    RentBill selectRentOrdersById(Long id);

    /**
     * 查询当/往月账单所有收益 (已收)
     */
    List<RentProfitVo> selectByRentProfitByMonth(@Param("apartmentId") List<Long> apartmentId,
                                                 @Param("month") Date month);

    /**
     * 查询当/往年账单所有收益 (已收)
     */
    List<RentProfitVo> selectByRentProfitByYear(@Param("apartmentId") List<Long> apartmentId,
                                                @Param("year") Date year);

    /**
     * 查询账单收益状态（未收、已收、逾期）
     */
    List<RentBill> selectByRentProfitByStatus(@Param("apartmentId") List<Long> apartmentId,
                                              @Param("month") Date month,
                                              @Param("status") String status,
                                              @Param("pageNum") int pageNum, @Param("pageSize") int pageSize);


    Integer rentStatusTotal(@Param("apartmentId") List<Long> apartmentId,
                            @Param("month") Date month,
                            @Param("status") String status);


    /**
     * 多表联查
     */
    List<RentBillVo> selectBillStatus(@Param("apartmentId") List<Long> apartmentId,
                                      @Param("date") Date date,
                                      @Param("status") String status);
}
